package com.foo.designpattern.proxy.staticproxy1;

/**
 * com.foo.designpattern.proxy.staticproxy1
 * Created with IntelliJ IDEA.
 * Created by jiang on 2016-04-29 17:03.
 *
 * @Description 代理角色，与真实角色同样实现Subject，对真实对象的方法进行封装(可以在处理真实对象前进行一些其他的操作)
 */

public class ProxySubject implements Subject {
    // 真实的对象
    private Subject realSubject;

    /**
     * 构造方法，实例化真实对象
     *
     * @param realSubject
     */
    public ProxySubject(Subject realSubject) {
        this.realSubject = realSubject;
    }

    /**
     * 该方法封装了真实对象的request方法
     */
    @Override
    public void request() {
        // 执行真实对象方法之前做手脚
        this.beforeRequest();
        // 执行真实对象的request方法
        realSubject.request();
        // 执行真实对象方法之后做手脚
        this.afterRequest();
    }

    /**
     * 私有方法 在处理真实对象之前进行的处理，如果居心不良可能会在这里做点坏事而且别人也不知道
     */
    private void beforeRequest() {
        System.out.println("偷偷的告诉你，我在处理真实对象之前做了点手脚");
    }

    /**
     * 私有方法 在处理真实对象之后进行的处理，如果居心不良可能会在这里做点坏事而且别人也不知道
     */
    private void afterRequest() {
        System.out.println("偷偷的修改真实对象的执行后的返回值神马的，如果我不说也没有人知道啊");
    }
}
